<?php
namespace Framework;

class Session{
    /**
     * 开启会话
     * 
     * @return void 
     */
    public static function start(){
        if (session_status() == PHP_SESSION_NONE) {
            session_start();
        }
    }

    /**
     * 设置会话键值对
     * 
     * @param string $key
     * @param mixed $value
     * @return void
     */
    public static function set($key,$value){
        $_SESSION[$key] = $value;
    }

    /**
     * 通过键获取会话值
     * 
     * @param string $key
     * @param mixed $default
     * @return mixed
     */
    public static function get($key,$default=null){
        return isset($_SESSION[$key]) ? $_SESSION[$key] : $default;
    }

    /**
     * 检查会话键是否存在
     * 
     * @param string $key
     * @return bool
     */
    public static function has($key){
        return isset($_SESSION[$key]);
    }

    /**
     * 清除指定的会话键
     * 
     * @param string $key
     * @return void
     */
    public static function clear($key){
        if (isset($_SESSION[$key])){
            unset($_SESSION[$key]);
        }
    }

    /**
     * 清除所有会话数据
     * 
     * @return void
     */
    public static function clearAll(){
        session_unset();
        session_destroy();
    }

    /**
     * 设置闪存消息
     * 
     * @param string $key
     * @param string $message
     * @return void
     */
    public static function setFlashMessage($key,$message){
        // 调用 set 方法将消息存储在会话中，键名钱加上'flash_' 前缀以区分。
        self::set('flash_' . $key,$message);
    }

    /**
     * 获取闪存信息并在获取后立刻删除
     * 
     * @param string $key
     * @param mixed $default
     * @return string
     */
    public static function getFlashMessage($key,$default=null){
        // 从会话中获取消息，如果不存在，则返回默认值
        $message = self::get('flash_'.$key,$default);
        self::clear('flash_'. $key);
        return $message;
    }
}